package server.server01;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/**
 * 封装请求协议：获取method uri 以及请求参数
 */
public class Request {
    //协议信息
    private String requestInfo;
    //请求方式
    private String method;
    //请求的url
    private String url;
    //请求的参数
    private String queryStr = "";
    private final String CRLF = "\r\n";//换行符
    public Request(Socket client) throws IOException {
        this(client.getInputStream());
    }
    public Request(InputStream is) {
        byte[] datas = new byte[1024*1024];
        int len = 0;
        try {
            len = is.read(datas);
            this.requestInfo = new String(datas,0,len);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        //分解字符串
        parseRequest();
    }
    private void parseRequest(){
        System.out.println("---分解开始---");
       //获取请求方式：开头到第一个/
        this.method=this.requestInfo.substring(0,this.requestInfo.indexOf('/')).toLowerCase().trim();
        //获取请求url ：开头到第一个/到http/  可能包含请求参数?前面的为url
        int startIdx = this.requestInfo.indexOf("/")+1;
        int endIdx = this.requestInfo.indexOf("HTTP/");
        this.url = this.requestInfo.substring(startIdx,endIdx);
        //获取？的的位置
        int queryIdx = this.url.indexOf('?');
        if(queryIdx>=0){//存在请求参数
            String[] urlArry = this.url.split("\\?");
            this.url = urlArry[0];
            queryStr = urlArry[1].trim();
        }
        //获取请求参数：如果get已经获取，如果是post可能在请求体中
        if(method.equals("post")){
            String qStr = this.requestInfo.substring(this.requestInfo.lastIndexOf(this.CRLF)).trim();
            if (qStr.length()>0){
                if (queryStr==""||queryStr==null){
                    queryStr+=qStr;
                }else{
                    queryStr+="&"+qStr;
                }
            }
        }
        System.out.println(this.queryStr);
    }
}
